/*
 * @copyright: ChengXuan
 * @Author: ding
 * @Date: 2022-07-27 16:47:24
 * @LastEditors: ding
 * @LastEditTime: 2022-07-28 10:54:04
 * @Description: 日志归档处理
 *
 * 太多切割文件，需按天归档
 *
 * 注意目前支持按天切割的日志。其他切割方式不支持。
 *
 */

import * as path from "path";

import * as fs from "fs";
import { EggAppConfig } from "egg";

const globby = require("globby");

/** 检查是否存在归档文件夹 */
export function checkAndMkdirLogArchive(config: EggAppConfig) {
  const logsArchiveDir = path.join(config.logger.dir, "archive");
  if (!fs.existsSync(logsArchiveDir)) {
    fs.mkdirSync(logsArchiveDir);
  }
}

/**
 * 执行一个日期的归档操作
 *
 *
 * @export
 * @param {string} date 形如：yyyy-MM-dd
 * @param {EggAppConfig} config
 */
export function archive(date: string, config: EggAppConfig) {
  const targetDir = path.join(config.logger.dir, "archive", date);
  if (!fs.existsSync(targetDir)) {
    fs.mkdirSync(targetDir);
  }
  const match = `*.${date}`;
  const filePaths = globby.sync(match, {
    cwd: config.logger.dir,
  });

  if (filePaths.length < 1) return true;
  //   移动匹配到的文件到归档文件夹
  for (const filePath of filePaths) {
    const oldPath = path.join(config.logger.dir, filePath);
    const newPath = path.join(targetDir, path.basename(filePath));
    fs.renameSync(oldPath, newPath);
  }
}

/**
 * 提供一个旧文件日志已归档的，删除某天的所有日志文件的接口
 *
 * - 比如删除1年前的日志文件（时间越久的日志文件价值越低，可以自动处理，而非由人工手动操作）
 * @param {string} date 要删除的日期 形如yyyy-MM-dd
 */
export function unlinkOldLogFile(date: string, config: EggAppConfig) {
  const logDir = config.logger.dir;
  console.log(logDir, date);
  const targetDir = path.join(logDir, "archive", date);
  if (!fs.existsSync(targetDir)) return true;
  const match = "*.*";
  const filePaths = globby.sync(match, { cwd: targetDir });
  for (const fileName of filePaths) {
    const fullPath = path.join(targetDir, fileName);
    fs.unlinkSync(fullPath);
  }
  fs.rmdirSync(targetDir);
  return true;
}
